package com.shared.utilitaire;

import javax.persistence.Id;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.googlecode.objectify.annotation.Entity;


/**
 * Classe rassemblant les informations relatives à une Date
 * @author queyroi
 *
 */
@Entity
public class Date implements IsSerializable{
	
	
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Id private Long key;
	private Integer jour=0;
	private Integer mois=0;
	private Integer annee=0;
	private Integer heure=0;
	private Integer minute=0;
	private Integer seconde=0;
	
	public Date() {
		// TODO Auto-generated constructor stub
	}
	
	
		
	
	public Date(int jour,int mois,int annee){
		this.jour = jour;
		this.mois = mois;
		this.annee = annee;
		
	}
	
	public Date(int jour,int mois,int annee,int heure,int minute,int seconde){
		this(jour,mois,annee);
		this.heure = heure;
		this.minute = minute;
		this.seconde = seconde;
	}
	
	
	
	
	public Date(String jour, String mois, String annee) {
		this(Integer.valueOf(jour),Integer.valueOf(mois),Integer.valueOf(annee));
	}




	/**
	 * @param date the date to compare
	 * @return if this is more recent than date
	 */
	public boolean isPlusRecent(Date d){		
		if(this.getAnnee()>d.getAnnee()) return true;		
		if(this.getMois()>d.getMois() && this.getAnnee()==d.getAnnee()) return true;		
		if(this.getJour()>d.getJour() && this.getMois()==d.getMois()) return true;
		if(this.getHeure()>d.getHeure() && this.getJour()==d.getJour()) return true;
		if(this.getMinute()>d.getMinute() && this.getHeure()==d.getHeure()) return true;
		if(this.getSeconde()>d.getSeconde() && this.getHeure()==d.getHeure()) return true;
		return false;
	}
	/**
	 * @return the key
	 */
	public Long getKey() {
		return key;
	}



	/**
	 * @param key the key to set
	 */
	public void setKey(Long key) {
		this.key = key;
	}
	public Integer getJour() {
		return jour;
	}
	
	public Integer getMois() {
		return mois;
	}


	/**
	 * @return the jour
	 */
	public String getJourString() {
		if (jour < 10){
			return "0"+jour;
		}else
			return ""+jour ;
		
	}



	/**
	 * @param jour the jour to set
	 */
	public void setJour(Integer jour) {
		this.jour = jour;
	}



	/**
	 * @return the mois
	 */
	public String getMoisString() {
		if (mois < 10){
			return "0"+mois;
		}else
			return ""+mois ;
		
	}


	/**
	 * @param mois the mois to set
	 */
	public void setMois(Integer mois) {
		this.mois = mois;
	}



	/**
	 * @return the annee
	 */
	public Integer getAnnee() {
		return annee;
	}



	/**
	 * @param annee the annee to set
	 */
	public void setAnnee(Integer annee) {
		this.annee = annee;
	}



	/**
	 * @return the heure
	 */
	public Integer getHeure() {
		return heure;
	}



	/**
	 * @param heure the heure to set
	 */
	public void setHeure(Integer heure) {
		this.heure = heure;
	}



	/**
	 * @return the minute
	 */
	public Integer getMinute() {
		return minute;
	}



	/**
	 * @param minute the minute to set
	 */
	public void setMinute(Integer minute) {
		this.minute = minute;
	}



	/**
	 * @return the seconde
	 */
	public Integer getSeconde() {
		return seconde;
	}



	/**
	 * @param seconde the seconde to set
	 */
	public void setSeconde(Integer seconde) {
		this.seconde = seconde;
	}



	/**
	 * Revoie la date d�cal�e d'un nombre de mois donn�s
	 * @param n nombre de mois � d�caler
	 * @return la date d�cal�e de n mois
	 */
	public Date nMoisPlusTard(int n){
		int mois=this.getMois()+n;
		int an=this.getAnnee()+mois/12;
		mois=mois%12;
		return new Date(this.getJour(),mois,an);
	}
	

	
	/**
	 * @return the date for printing
	 */
	
	public String getDateString(){
		return getJour()+"/"+getMois()+"/"+getAnnee();
	}
	
	
	public String toString(){
		return getDateString();
	}
	
		
	

}